package headfirst.designpatterns.factory.c_pizzaaf_abstartfactory.pizzastore;

import headfirst.designpatterns.factory.c_pizzaaf_abstartfactory.b_pizza.Pizza;

/**
 * 披萨商店（抽象类）
 */
public abstract class PizzaStore {
 
	protected abstract Pizza createPizza(String item);

	/**
	 * 制作披萨
	 * @param type
	 * @return
	 */
	public Pizza orderPizza(String type) {
		// **********************************************
		// 把实例具体类型提取封装，这个对象只管创建披萨，称为工厂
		// **********************************************
		Pizza pizza = createPizza(type);
		// 开始制作披萨
		System.out.println("--- Making a " + pizza.getName() + " ---");
		// 准备工作（每一个子类型都知道如何准备自己————都有自己的实现类）
		pizza.prepare();
		// 烘焙
		pizza.bake();
		// 切割
		pizza.cut();
		// 装盒
		pizza.box();

		return pizza;
	}
}
